﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace EntitiesLayer
{
    public sealed class  Notificacion : IEntity
    {
        private readonly int idNotificacion;

        public int Id {
            get { return idNotificacion; }
        }

        private readonly int idEmisor;
        public int IdEmisor {

            get { return idEmisor; }
        }

        private readonly int idReceptor;
        public int IdReceptor
        {
            get { return idReceptor; }
        }

        private readonly EstadoNotificacion estado;
        public EstadoNotificacion Estado
        {

            get { return estado; }
        } 
        private readonly string mensaje;
        public string Mensaje {
            get { return mensaje; }
        }

        private DateTime fecha;
        public DateTime Fecha{
            get{return fecha;}
        
        }

        /// <summary>
        /// N= no leido
        /// </summary>
        /// <param name="idEmisor"></param>
        /// <param name="idReceptor"></param>
        /// <param name="mensage"></param>
        /// <param name="estado"></param>
        public Notificacion(int idEmisor, int idReceptor, string mensage, DateTime fecha, 
            EstadoNotificacion estado = EstadoNotificacion.Leido, int idNotificacion = 0)
        {
            if (mensaje==null||mensage.Equals(""))
               throw new ArgumentNullException("El mensage no puede ser nulo o el string vacio");

            this.fecha=fecha;
            this.idNotificacion = idNotificacion;
            this.idReceptor= idReceptor;
            this.idEmisor = idEmisor;
            this.mensaje = mensage;
            this.estado = estado;
        
        }

        public Notificacion Cambiar(string mensage, EstadoNotificacion estado ) {

            return new Notificacion(IdEmisor , IdReceptor, mensaje, Fecha,estado, Id);
        }

        public Notificacion CambiarMensage(string mensaje)
        {

            return Cambiar(mensaje,Estado);
        }

        public Notificacion CambiarEstado(EstadoNotificacion estado)
        {

            return Cambiar(Mensaje, Estado);
        }
    
    }


    public enum EstadoNotificacion { 
    
        Leido='L',
        NoLeido='N'
    
    }
}
